package MyString;

/**
 * 1513. 仅含 1 的子串数
 *
 * 给你一个二进制字符串 s（仅由 '0' 和 '1' 组成的字符串）。
 *
 * 返回所有字符都为 1 的子字符串的数目。
 *
 * 由于答案可能很大，请你将它对 10^9 + 7 取模后返回。
 *
 *
 *
 * 示例 1：
 *
 * 输入：s = "0110111"
 * 输出：9
 * 解释：共有 9 个子字符串仅由 '1' 组成
 * "1" -> 5 次
 * "11" -> 3 次
 * "111" -> 1 次
 */

public class Leetcode1513 {
    public static  int numSub(String s) {
        int len = s.length();
        int mod = 1000000007;
        int left = 0, flag = 0;
        long count = 0;
        for (int i=0; i<len; i++){
            if(flag == 0 && s.charAt(i)== '1'){
                left = i;
                flag = 1;
            }else if(flag == 1 && s.charAt(i)== '0' ){
                int s_len = i - left;
                count = (long) ((count + (long) (s_len + 1) * s_len / 2 % (mod)) % (mod));
                flag = 0;
            }
//            System.out.println(i + " " + left + " " + flag);
        }
        if(flag == 1){
            int s_len = len - left;
            count = (long) ((count + (long) (s_len + 1) * s_len / 2 % (mod)) % (mod));
        }
        return (int) count;
    }

    public static void main(String[] args) {
        String ss = "01100111";
        System.out.println(numSub(ss));
    }
}
